package com.bt.lms.ui.page.common;

import com.bt.lms.ui.page.common.action.pagecommon.*;
import com.bt.lms.main.BotLmsApp;
import com.bt.lms.ui.page.sys.utils.MyHBox;
import com.bt.lms.ui.vo.PageSkipInfo;
import com.bt.lms.ui.page.sys.style.BoxStyle;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Cursor;
import javafx.scene.Node;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;


/**
 * 公共界面
 */
public class PageCommon extends VBox {

    /**
     * 首页标签
     */
    private Label firstLab;

    /**
     * 招生管理标签
     */
    private Label enpLab;

    /**
     * 学籍管理标签
     */
    private Label recordLab;

    /**
     * 教学管理标签
     */
    private Label teachingLab;

    /**
     * 系统管理标签
     */
    private Label sysLab;

    /**
     * 二级索引宽度
     */
    public static final Integer TWO_WIGHT = 186;

    /**
     * 界面跳转信息
     */
    private final PageSkipInfo pageSkipInfo;

    /**
     * 构建公共界面
     */
    public PageCommon() {

        //维护
        pageSkipInfo = new PageSkipInfo();
        pageSkipInfo.setPane(this);
        pageSkipInfo.setIndex(2);

        //大小
        this.setPrefWidth(BotLmsApp.WIGHT);
        this.setMinHeight(BotLmsApp.HEIGHT);

        //背景色
        BoxStyle.overallSituation(this);

        //布局
//        Insets insets = new Insets(15,0,15,0);
//        this.setSpacing(6);
//        this.setPadding(insets);

        //组件
        //系统信息
        MyHBox sysHBox = sysHBoxInit();
        ObservableList<Node> sysHBoxChildren = this.getChildren();
        sysHBoxChildren.add(sysHBox);

        //主索引
        MyHBox indexesHBox = indexesHBoxInit();
        ObservableList<Node> indexesChildren = this.getChildren();//组件添加
        indexesChildren.add(indexesHBox);
        //背景色
        BoxStyle.mainBackdrop(indexesHBox);

        //二级索引(默认首页)
        PageFirst pageFirst = new PageFirst();
        ObservableList<Node> pageFirstChildren = this.getChildren();//组件添加
        pageFirstChildren.add(pageFirst);

    }

    /**
     * 系统信息
     *
     * @return 系统信息盒子
     */
    private MyHBox sysHBoxInit() {

        MyHBox myHBox = new MyHBox();
        BoxStyle.overallSituation(myHBox);

        //统一宽度
        int sysHBoxWight = BotLmsApp.WIGHT / 2;


        //系统名称
        MyHBox sysNameHBox = new MyHBox();
        sysNameHBox.setPrefWidth(sysHBoxWight);
        //布局
        sysNameHBox.setPadding(new Insets(10, 20, 10, 20));
        sysNameHBox.setSpacing(10);
        sysNameHBox.setAlignment(Pos.CENTER_LEFT);
        //组件
        Label sysNameLab = new Label("博添教学管理系统");
        sysNameHBox.getChildren().add(sysNameLab);
        myHBox.getChildren().add(sysNameHBox);

        //使用人
        MyHBox sysPerHBox = new MyHBox();
        sysPerHBox.setPrefWidth(sysHBoxWight);
        //布局
        sysPerHBox.setPadding(new Insets(10, 20, 10, 20));
        sysPerHBox.setSpacing(5);
        sysPerHBox.setAlignment(Pos.CENTER_RIGHT);
        //组件
        Label nameLab = new Label("李毅");
        sysPerHBox.getChildren().add(nameLab);

        Label identityLab = new Label("(管理员)，您好");
        sysPerHBox.getChildren().add(identityLab);

        ComboBox<String> checkBox = new ComboBox<>();
        checkBox.getItems().add("身份切换");
        checkBox.getSelectionModel().selectFirst();
        sysPerHBox.getChildren().add(checkBox);

        Label quitLab = new Label("退出");
        sysPerHBox.getChildren().add(quitLab);

        myHBox.getChildren().add(sysPerHBox);

        return myHBox;
    }

    /**
     * 主索引初始化
     *
     * @return 主索引
     */
    private MyHBox indexesHBoxInit() {

        //主索引盒子
        MyHBox myHBox = new MyHBox();

        //布局
        myHBox.setSpacing(6);
        myHBox.setAlignment(Pos.CENTER);

        //首页标签初始化
        firstLabInit(myHBox);
        //招生标签初始化
        enpLanInit(myHBox);
        //学习标签初始化
        recordLabInit(myHBox);
        //教学标签初始化
        teachingLabInit(myHBox);
        //系统标签初始化
        sysLabInit(myHBox);

        return myHBox;
    }

    /**
     * 系统标签初始化
     *
     * @param myHBox 标签所在盒子
     */
    private void sysLabInit(MyHBox myHBox) {

        //系统标签
        sysLab = new Label("系统管理");
        myHBox.getChildren().add(sysLab);
        styleLab(sysLab);//样式
//        SysLabAction sysLabAction = new SysLabAction(pageSkipInfo);
//        sysLab.setOnMouseClicked(sysLabAction);
        //小手图案
        sysLab.setCursor(Cursor.HAND);

        //事件 鼠标移入
        sysLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(sysLab);
        });
        //事件 鼠标移出
        sysLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(sysLab);
        });
        //事件 鼠标点击
        sysLab.setOnMouseClicked(event -> {
            //移出所有标签背景色
            removeLabStyle();
            //添加选中背景色
            labClicked(sysLab);
            //重写鼠标移出事件
            sysLab.setOnMouseExited(event1 -> {
            });
            //重写鼠标移入事件
            sysLab.setOnMouseEntered(event1 -> {
            });
            //界面跳转
            Pane pane = pageSkipInfo.getPane();
            Integer index = pageSkipInfo.getIndex();

            PageSys pageSys = new PageSys();

            ObservableList<Node> children = pane.getChildren();
            children.set(index, pageSys);
        });
    }

    /**
     * 教学标签初始化
     *
     * @param myHBox 标签所在盒子
     */
    private void teachingLabInit(MyHBox myHBox) {

        //教学管理标签
        teachingLab = new Label("教学管理");
        myHBox.getChildren().add(teachingLab);
        styleLab(teachingLab);//样式
//        TeachingLabAction teachingLabAction = new TeachingLabAction(pageSkipInfo);//事件
//        teachingLab.setOnMouseClicked(teachingLabAction);
        //小手图案
        teachingLab.setCursor(Cursor.HAND);

        //事件 鼠标移入
        teachingLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(teachingLab);
        });
        //事件 鼠标移出
        teachingLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(teachingLab);
        });
        //事件 鼠标点击
        teachingLab.setOnMouseClicked(event -> {
            //移出所有标签背景色
            removeLabStyle();
            //添加选中背景色
            labClicked(teachingLab);
            //重写鼠标移出事件
            teachingLab.setOnMouseExited(event1 -> {
            });
            //重写鼠标移入事件
            teachingLab.setOnMouseEntered(event1 -> {
            });
            //界面跳转
            Pane pane = pageSkipInfo.getPane();
            Integer index = pageSkipInfo.getIndex();

            PageTeaching pageTeaching = new PageTeaching();

            ObservableList<Node> children = pane.getChildren();
            children.set(index, pageTeaching);
        });
    }

    /**
     * 学习标签初始化
     *
     * @param myHBox 标签所在盒子
     */
    private void recordLabInit(MyHBox myHBox) {

        //学籍管理标签
        recordLab = new Label("学籍管理");
        myHBox.getChildren().add(recordLab);
        styleLab(recordLab);//样式
//        RecordLabAction recordLabAction = new RecordLabAction(pageSkipInfo);//事件
//        recordLab.setOnMouseClicked(recordLabAction);
        //小手图案
        recordLab.setCursor(Cursor.HAND);

        //事件 鼠标移入
        recordLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(recordLab);
        });
        //事件 鼠标移出
        recordLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(recordLab);
        });
        //事件 鼠标点击
        recordLab.setOnMouseClicked(event -> {
            //移出所有标签背景色
            removeLabStyle();
            //添加选中背景色
            labClicked(recordLab);
            //重写鼠标移出事件
            recordLab.setOnMouseExited(event1 -> {
            });
            //重写鼠标移入事件
            recordLab.setOnMouseEntered(event1 -> {
            });
            //界面跳转
            //获取学员信息
            Pane pane = pageSkipInfo.getPane();
            Integer index = pageSkipInfo.getIndex();

            PageRecord pageRecord = new PageRecord();

            ObservableList<Node> children = pane.getChildren();
            children.set(index, pageRecord);
        });
    }



    /**
     * 招生标签初始化
     *
     * @param myHBox 标签所在盒子
     */
    private void enpLanInit(MyHBox myHBox) {

        //招生管理标签
        enpLab = new Label("招生管理");
        myHBox.getChildren().add(enpLab);
        styleLab(enpLab);//样式
        EnpLabAction enpLabAction = new EnpLabAction(pageSkipInfo);//事件
        enpLab.setOnMouseClicked(enpLabAction);
        //小手图案
        enpLab.setCursor(Cursor.HAND);
        //事件 鼠标移入
        enpLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(enpLab);
        });
        //事件 鼠标移出
        enpLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(enpLab);
        });
        //事件 鼠标点击
        enpLab.setOnMouseClicked(event -> {
            //移出所有标签背景色
            removeLabStyle();
            //添加选中背景色
            labClicked(enpLab);
            //重写鼠标移出事件
            enpLab.setOnMouseExited(event1 -> {
            });
            //重写鼠标移入事件
            enpLab.setOnMouseEntered(event1 -> {
            });
            //界面跳转
            Pane pane = pageSkipInfo.getPane();
            Integer index = pageSkipInfo.getIndex();

            PageEnp pageEnp = new PageEnp();

            ObservableList<Node> children = pane.getChildren();
            children.set(index, pageEnp);
        });
    }

    /**
     * 首页便签初始化
     *
     * @param myHBox 标签所在盒子
     */
    private void firstLabInit(MyHBox myHBox) {

        //首页便签
        firstLab = new Label("首页");
        myHBox.getChildren().add(firstLab);//添加进盒子
        styleLab(firstLab);//样式
//        FirstLabAction firstLabAction = new FirstLabAction(pageSkipInfo);//事件
//        firstLab.setOnMouseClicked(firstLabAction);
        //小手图案
        firstLab.setCursor(Cursor.HAND);
        //事件 鼠标移入
        firstLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(firstLab);
        });
        //事件 鼠标移出
        firstLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(firstLab);
        });
        //事件 鼠标点击
        firstLab.setOnMouseClicked(event -> {
            //移出所有标签背景色
            removeLabStyle();
            //添加选中背景色
            labClicked(firstLab);
            //重写鼠标移出事件
            firstLab.setOnMouseExited(event1 -> {
            });
            //重写鼠标移入事件
            firstLab.setOnMouseEntered(event1 -> {
            });
            //界面跳转
            Pane pane = pageSkipInfo.getPane();
            Integer index = pageSkipInfo.getIndex();

            PageFirst pageFirst = new PageFirst();

            ObservableList<Node> children = pane.getChildren();
            children.set(index, pageFirst);
        });
    }

    /**
     * 标签样式
     *
     * @param label 标签
     */
    private void styleLab(Label label) {

        Insets insets = new Insets(16, 18, 16, 18);
        label.setPadding(insets);

    }

    /**
     * 移入标签（改变背景色）
     *
     * @param label 标签
     */
    private void labMoved(Label label) {
        Color color = Color.rgb(230, 230, 230);
        Color toColor = Color.rgb(220, 220, 220);

        //添加背景色
        hintStyle(label, color, toColor);

    }

    /**
     * 移出标签（改变背景色）
     *
     * @param label 标签
     */
    private void labExited(Label label) {

        Color color = Color.rgb(235, 235, 235);
        Color toColor = Color.rgb(225, 225, 225);

        //添加背景色
        hintStyle(label, color, toColor);

    }

    /**
     * 点击标签
     *
     * @param label 被点击的标签
     */
    private void labClicked(Label label) {

        Color color = Color.rgb(220, 220, 220);
        Color toColor = Color.rgb(200, 200, 200);

        //添加背景色
        hintStyle(label, color, toColor);
    }

    /**
     * 添加背景色
     *
     * @param label   要添加的标签
     * @param color   开始颜色
     * @param toColor 结束颜色
     */
    private void hintStyle(Label label, Color color, Color toColor) {

        //可以渐变的颜色（0-1）
        Stop[] stops = new Stop[]{
                new Stop(0, color), new Stop(1, toColor)};

        //渐变颜色（0-1变化）
        LinearGradient linear = new LinearGradient(
                0, 0, 0, 1, true,
                CycleMethod.NO_CYCLE, stops);

        BackgroundFill backgroundFill = new BackgroundFill(linear, null, null);
        Background background = new Background(backgroundFill);
        label.setBackground(background);

    }

    /**
     * 移出标签样式（背景色）
     */
    private void removeLabStyle() {
        //清空背景色（可以判断移出特定的）
        firstLab.setBackground(null);
        enpLab.setBackground(null);
        recordLab.setBackground(null);
        teachingLab.setBackground(null);
        sysLab.setBackground(null);

        //重新添加事件
        firstLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(firstLab);
        });
        firstLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(firstLab);
        });
        enpLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(enpLab);
        });
        enpLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(enpLab);
        });
        recordLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(recordLab);
        });
        recordLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(recordLab);
        });
        teachingLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(teachingLab);
        });
        teachingLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(teachingLab);
        });
        sysLab.setOnMouseExited(event -> {
            //移出标签方法（改变背景色）
            labExited(sysLab);
        });
        sysLab.setOnMouseEntered(event -> {
            //移入标签方法（改变背景色）
            labMoved(sysLab);
        });
    }
} 
